package main
/**
* gitee webhook，gitee不支持cicd，所以通过webhook的方式和实现自动化的部署
 */
import (
	"bufio"
	"fmt"
	"io"
	"log"
	"net/http"
	"os/exec"
)

func main()  {
	//第一个参数是接口名，第二个参数是http handle func
	http.HandleFunc("/gitee", gitee)
	//服务器要监听的主机地址和端口号
	//log.Println("Listening 127.0.0.1:8081...")
	http.ListenAndServe("127.0.0.1:8081", nil)

}

func gitee(rw http.ResponseWriter, req *http.Request) {
	err := req.ParseForm()
	var branch []string
	if err != nil {
		log.Println("参数错误：", err)
	}
	for i,v := range req.Form{
		log.Println("返回值：", rw)
		log.Println("请求参数：", i)
		branch = v
	}
	result := deploy("git", []string{"pull", branch[0]})
	fmt.Println(result)

}

func deploy(commandName string, params []string) bool {
	//函数返回一个*Cmd，用于使用给出的参数执行name指定的程序
	cmd := exec.Command(commandName, params...)
	fmt.Println("执行命令：", cmd.Args)
	stdout, err := cmd.StdoutPipe()
	stderr, err := cmd.StderrPipe()

	if err != nil {
		fmt.Println(err)
		return false
	}

	cmd.Start()
	// 标准输出
	reader := bufio.NewReader(stdout)

	// 错误输出
	if stderr != nil {
		reader = bufio.NewReader(stderr)
	}
	// 实时循环读取输出流中的一行内容
	for {
		line, err2 := reader.ReadString('\n')
		if err2 != nil || io.EOF == err2 {
			break
		}
		fmt.Println(line)
	}
	cmd.Wait()
	return true

}